//
//  LXJOAuthController.swift
//  XJWeiBo
//
//  Created by 李旭杰 on 2017/3/27.
//  Copyright © 2017年 李旭杰. All rights reserved.
//

import UIKit
import SVProgressHUD

/// 登录注册控制器
class LXJOAuthController: UIViewController {
    
    // MARK: AppKey 属性 和 redirect_uri 属性
    let AppKey = "2606577968"
    let redirect_uri = "https://user.qzone.qq.com"
    
    // MARK: 控件的懒加载
    lazy var loginWebview = UIWebView()
    
    /// 自定义控制器的 view
    override func loadView() {
        /// 设置 webview 的代理对象
        loginWebview.delegate = self
        /// 自定义控制器的 view
        view = loginWebview
        /// 设置标题
        title = "新浪微博"
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        /// 界面搭建
        setupUI()
        setupNavItemUI()
        /// 网页加载
        loadSinaWeiboOAuthWebview()
    }
    
    // MARK: 页面搭建
    func setupUI() -> Void {
        /// 设置背景颜色
        view.backgroundColor = UIColor.white
        
    }
    
    func setupNavItemUI() -> Void {
        /// 左边取消摁扭
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "取消", target: self, action: #selector(cancelOperation))
        /// 右边的自动填充摁扭
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", target: self, action: #selector(autoFillAccountAndPasswordOperation))
    }
    
    // MARK: 摁扭的点击事件
    /// 返回当前控制器
    func cancelOperation() -> Void {
        dismiss(animated: true, completion: nil)
    }
    
    /// 自动填充账号密码
    func autoFillAccountAndPasswordOperation() -> Void {
        //        /// 创建网络管理对象
        //        let manager = LXJNetworkManager.sharedManager
        //        /// 追加 afn 支持的数据类型
        //        manager.responseSerializer.acceptableContentTypes?.insert("text/html")
        //
        //        /// 发起网络请求
        //        manager.requestNetworkingData(requestType: .get, URLString: "http://www.weather.com.cn/data/sk/101010100.html", parameters: nil) { (response, error) in
        //            if error != nil{
        //                print("数据请求失败")
        //                print("http://www.weather.com.cn/data/sk/101010100.html 请求失败,错误原因:\(error)")
        //            }
        //
        //            /// 执行到此数据请求成功
        //            print(response!)
        //            /// 查看当前线程
        //            print(Thread.current)
        //        }
        loginWebview.stringByEvaluatingJavaScript(from: "document.getElementById('userId').value = '490527059@qq.com';document.getElementById('passwd').value = 'King9742';")
    }
    
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }   
}

// MARK: 加载 web 页面内容
extension LXJOAuthController {
    func loadSinaWeiboOAuthWebview() -> Void {
        /// 拼接 URL 地址
        let URLString = "https://api.weibo.com/oauth2/authorize?client_id=\(AppKey)&redirect_uri=\(redirect_uri)"
        /// 创建请求对象
        let request = URLRequest(url: URL(string: URLString)!)
        /// 加载网页内容
        loginWebview.loadRequest(request)
    }
}

// MARK: 实现 webView 的代理方法
extension LXJOAuthController: UIWebViewDelegate {
    /// 开始加载 webVie
    func webViewDidStartLoad(_ webView: UIWebView) {
        /// 弹出进度框
        SVProgressHUD.show()
    }
    
    /// webVie 页面加载完成
    func webViewDidFinishLoad(_ webView: UIWebView) {
        /// 进度框消失
        SVProgressHUD.dismiss()
    }
    
    /// webVie 加载异常
    func webView(_ webView: UIWebView, didFailLoadWithError error: Error) {
        /// 进度框消失
        SVProgressHUD.dismiss()
    }
    
    /// 跟踪重定向 URL
    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        /// 获取到url字符串
        let urlString = request.url!.absoluteString
        
        /// 如果不是以回调页开头，直接让WebView继承加载(因为 webview 有一些其他操作需要执行)
        if !urlString.hasPrefix(redirect_uri) {
            return true
        }
        
        /// 判断是否包含 'code=' 字样
        if let query = request.url?.query , query.hasPrefix("code=") {
            /// 截取授权码
            let code = query.substring(from: "code=".endIndex)
            /// 发起授权过的Access Token的网络请求
            //  requestAccessToken(code: code)
            LXJOAuthViewModel.sharedOAuthViewModel.requestAccessToken(code: code, success: { (isSuccess) in
                if isSuccess{/// 登录成功
                    /// 销毁当前控制器,并且打开欢迎页面
                    self.dismiss(animated: true, completion: { 
                        /// 发送切换根视图控制器的通知
                        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "SwitchRootViewContrlooer"), object: self)
                    })
                }else{/// 登录失败
                    print("登录失败")
                }
            })
        }else{
            // 用户点击了取消授权，直接关闭页面
            SVProgressHUD.dismiss()
            dismiss(animated: true, completion: nil)
        }
        
        /// 不加载授权回调地址
        return false
    }
}
